import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import matplotlib.pyplot as plt

# 设置 matplotlib 使用的中文字体（这里使用了SimHei字体）
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体字体
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

# 创建一个简单的神经网络模型
model = models.Sequential([
    layers.Dense(16, activation='relu', input_shape=(20,)),  # 输入层
    layers.Dense(1, activation='sigmoid')  # 输出层
])

# 编译模型
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# 生成一些随机数据作为示例，数据大小为1000x20，标签为0或1的随机数
data = np.random.random((1000, 20))
labels = np.random.randint(2, size=(1000, 1))

# 训练模型
model.fit(data, labels, epochs=10, batch_size=32)

# 生成测试数据
test_data = np.random.random((100, 20))
test_labels = np.random.randint(2, size=(100, 1))

# 使用模型进行预测
predictions = model.predict(test_data)

# 将预测结果转为二分类形式 (0 或 1)
predicted_classes = (predictions > 0.5).astype("int32")

# 只取前10个样本的数据和标签
test_labels_subset = test_labels[:10]
predicted_classes_subset = predicted_classes[:10]
predictions_subset = predictions[:10]

# 输出前10个样本的真实标签、预测值和预测概率
print("真实标签：", test_labels_subset)
print("预测值：", predicted_classes_subset)
print("预测概率：", predictions_subset)

# 绘制对比图
plt.figure(figsize=(10, 6))

# 绘制真实标签（离散点）
plt.scatter(np.arange(len(test_labels_subset)), test_labels_subset, label='真实标签', color='blue', marker='o')

# 绘制预测值（离散点），将预测结果按0或1显示
plt.scatter(np.arange(len(predicted_classes_subset)), predicted_classes_subset, label='预测值 (0/1)', color='red', marker='x')

# 绘制预测概率（连续值）
plt.plot(np.arange(len(predictions_subset)), predictions_subset, label='预测概率', color='green', linestyle='--')

# 添加图例和标题
plt.xlabel('样本索引')
plt.ylabel('标签/预测值/预测概率')
plt.title('前10个样本的真实标签与预测值及预测概率对比')
plt.legend()

# 显示图形
plt.show()
